<?php
//Передача по ссылке используется для возможности использования в array_walk
//Функция убирается из строки все символы кроме a-z A-z - . _ И заменяет - на _
function clear_url(&$str) {
    $str = preg_replace('([^a-zA-Z0-9_])', '', $str);
    return true;
}

//Подготавливает строку для передачи в качестве значения свойста JSON
function toJSON($str, $strong = FALSE) {
    if ($strong)
       $str = htmlspecialchars($str);
    
    $str = str_replace("\n", '', $str);
    $str = addslashes($str);
    return $str;
}

//Очищаем строчку от служебных символов
function destroyBadSymbols($str) {
    $bad_symbols = '! ? \ / \' " . < > `';
    return str_replace(explode(' ', $bad_symbols), '', $str);
}

//Проверяет строку на непустоту
function is_blank($str) {
    return is_null($str) || ctype_space($str) || $str == '';
}

//$idn - иногда мы хотим обеспечить прямой доступ к потомкам, по какому-то полю (не по номеру)
//Например писать ['subitems']['preved'], вместо ['subitems'][2], где что такое 2 не понятно
function generateTree(&$res, &$node, &$nodes, $fields = array('title'), $idn = FALSE) {
    $ids_str = $node->getField('order');
    
    if(!isset($ids_str) || $ids_str == '')
        return;
    else
    {
        $ids = explode(',', $ids_str);
		
		$res = $node->getFields($fields);
        
        $i = 0;
        foreach($ids as $id) {
        	if (!$idn) $key = $i; else $key = $nodes[$id]->getField($idn);
			
			$res['subitems'][$key] = $nodes[$id]->getFields($fields);
            
            generateTree($res['subitems'][$key], $nodes[$id], $nodes, $fields, $idn);
            
            $i++;
        }
    }
}
?>